home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Printing / ResTest < prev   
Internet Message Format  |  1994-06-09  |  12KB

  1. Date: Fri, 6 May 94 11:47 PDT
  2. From: dant@u.washington.edu
  3. Subject: [*] ResTest; a resolution test pattern in postscript
  4.  
  5. The following is an excerpt from the comments in the file:
  6.  
  7. % This chart started out with video cameras in mind, but can be used to
  8. % test about any image input or output device.  Print it (it is a
  9. % postscript file) or input it (scan it, frame grab it) from hard copy;
  10. % note where the converging lines are no longer separate.  The patterns 
  11. % it has are: a circle of wedges, two long wedges, a series of line widths, 
  12. % and a range of font sizes.
  13.  
  14. % One nice thing about postscript is that it scales with the capabilities of
  15. % the device.  This chart goes from 200 to over 5000 lines/image (from 35 to
  16. % over 1000 lines/inch), whatever the device can do.
  17.   
  18. % Dan Tomandl; University of Washington. dant@u.washington.edu
  19. --------------------------------cut here-----------------------------------
  20. %!PS-Adobe-1.0
  21.  
  22. % Resolution Chart
  23.  
  24. % This chart started out with video cameras in mind, but can be used to
  25. % test about any image input or output device.  Print it (it is a
  26. % postscript file) or input it (scan it, frame grab it) from hard copy;
  27. % note where the converging lines are no longer separate.  The patterns 
  28. % it has are: a circle of wedges, two long wedges, a series of line widths, 
  29. % and a range of font sizes.
  30.  
  31. % One nice thing about postscript is that it scales with the capabilities of
  32. % the device.  This chart goes from 200 to over 5000 lines/image (from 35 to
  33. % over 1000 lines/inch), whatever the device can do.  Ideally your printed
  34. % copy will have enough resolution to adequately challenge your input
  35. % device; if not, and if your input device is a camera, you could just back
  36. % off until the the chart takes up only a fraction of the image.  Of course
  37. % you would then use that fraction to scale up the chart resolution numbers.
  38.  
  39. % To get this file to your printer, print it, or download it.
  40. % One way to print it is with MS Word: select all, change style to
  41. % Postscript, then print to a postscript printer.
  42.  
  43. % Interpretation example: let's say the lines blend together at the second
  44. % dashed circle (the first one inside the edge) in the upper half of the
  45. % circular test pattern. The resolution is 300 lines across the vertical
  46. % dimension, 400 across the horizontal (in []) (the box and TVs have a 3 x
  47. % 4 aspect ratio), and 51 lines/inch (in {}). Note that numbers include
  48. % *both* the black and white lines.  Lines/inch is comparable to dots/inch
  49. % or pixels/inch; divide by 2 to get line pairs/inch.
  50.  
  51. % After testing several scanners and printers I noticed a fairly consistent
  52. % pattern: the lines merged at about half the dpi for the
  53. % laser printers I tested (from 300 to 1200 dpi).  The scanners I tested
  54. % picked up line separations down to their dpi specs.
  55.  
  56. % I couldn't resist filling some unused space with more test patterns.  I
  57. % put in some font sizes, then the line width progressions around the edges;
  58. % finally the sparse line progression on the bottom (to get an uncrowded
  59. % view of small line widths) and the long wedges (which have the same
  60. % widths as the progression near them).  Enjoy.
  61.  
  62. % Dan Tomandl; University of Washington; 3/94.
  63. % Permission is hereby given to freely use this file.  Comments and
  64. % questions may be addressed to dant@u.washington.edu
  65.  
  66. % Construction details:
  67. %   At res=200 lines .0285in/line; radius=2.04in ==>.8deg; 450 lines/circle;
  68. %   225 dark wedges .8 deg each; 35.1 lines/in.
  69. %   RETMA resolution chart 1956 was used as a guide.
  70.  
  71. 72 72 scale  % use inches
  72. /Times-Roman findfont .20 scalefont setfont
  73. .02 setlinewidth
  74. 4.25 5.5 translate
  75. 90 rotate  % landscape
  76. 0 setgray  % for fills
  77.  
  78. newpath
  79. /rad 2.04 def
  80.   0 1.6 180  % top half of circle
  81.     {gsave
  82.       rotate
  83.         newpath
  84.         rad 0 moveto 0 0 lineto
  85.         .8 rotate
  86.         rad 0 lineto
  87.       closepath
  88.       fill
  89.       grestore
  90.          } for
  91.  
  92.   180 0.4 360  % bottom half of circle; lines 4 times as dense as top
  93.     {gsave
  94.       rotate
  95.         newpath
  96.         rad 0 moveto 0 0 lineto
  97.         .2 rotate
  98.         rad 0 lineto
  99.       closepath
  100.       fill
  101.       grestore
  102.          } for
  103. newpath
  104. 15 45 360  % make dashed circles
  105. {/a exch def
  106. 0 0 rad a a 15 add arc stroke % res=200
  107. 0 0 rad 2 mul 3 div a a 15 add arc stroke % res=300
  108. 0 0 rad 2 div a a 15 add arc stroke % res=400
  109. 0 0 rad 2 mul 5 div a a 15 add arc stroke % res=500
  110. 0 0 rad 2 mul 7 div a a 15 add arc stroke % res=700
  111. 0 0 rad 2 mul 9 div a a 15 add arc stroke % res=900
  112. 0 0 rad 2 mul 12 div a a 15 add arc stroke % res=1200
  113.     } for
  114.  
  115. % labels
  116. 0 -.1 translate
  117. rad -1.3 add rad moveto (200 [267] {35}) show
  118. rad -.4  add rad 2 mul 3 div moveto (300 [400] {53}) show
  119. rad -.15 add rad 2 div moveto (400 [533] {70}) show
  120. rad -.08 add rad 2 mul 5 div moveto (500 [667] {88}) show
  121. /Times-Roman findfont .15 scalefont setfont
  122. rad  .00 add rad 2 mul 7 div moveto (700 [933] {123}) show
  123. rad  .02 add rad 2 mul 9 div moveto (900 [1200] {158}) show
  124. rad  .02 add rad 2 mul 12 div moveto (1200 [1600] {211}) show
  125. 0 .1 translate
  126. rad -1.3 add rad neg moveto (800 [1067] {140}) show
  127. rad -.40 add rad 2 mul 3 div neg moveto (1200 [1600] {211}) show
  128. rad -.15 add rad 2 div neg moveto (1600 [2133] {281}) show
  129. rad -.08 add rad 2 mul 5 div neg moveto (2000 [2667] {351}) show
  130. rad  .00 add rad 2 mul 7 div neg moveto (2800 [3733] {491}) show
  131. rad  .02 add rad 2 mul 9 div neg moveto (3600 [4800] {632}) show
  132. rad  .02 add rad 2 mul 12 div neg moveto (4800 [6400] {842}) show
  133. /Times-Roman findfont .20 scalefont setfont
  134.  
  135.  
  136. % font size sampler
  137. gsave
  138. -3.2 2.0 translate
  139.  
  140. /c .40 def
  141. /bb 20 string def
  142. .40 -.10 .20
  143. {/b exch def
  144. /Times-Roman findfont b scalefont setfont
  145. /c c b sub def
  146. 0 c moveto b bb cvs show
  147.   } for
  148.  
  149. .15 -.01 .01
  150. {/b exch def
  151. /Times-Roman findfont b scalefont setfont
  152. /c c b sub def
  153. 0 c moveto b bb cvs show
  154.   } for
  155. grestore
  156.  
  157. gsave
  158. -3.2 0 translate
  159. .0139 .0139 scale % use points
  160.  
  161. /c 0 def
  162. 1 1 15
  163. {/b exch def
  164. /Times-Roman findfont b scalefont setfont
  165. /c c b .95 mul sub def
  166. 0 c moveto b bb cvs show
  167.   } for
  168.  
  169. 20 10 30
  170. {/b exch def
  171. /Times-Roman findfont b scalefont setfont
  172. /c c b .95 mul sub def
  173. 0 c moveto b bb cvs show
  174.   } for
  175.  
  176. /Times-Roman findfont 14 scalefont setfont
  177. -11 -177 moveto (Font size in points) show
  178. grestore
  179.  
  180.  
  181. /box {
  182. -3.8 -2.85 moveto
  183.  3.8 -2.85 lineto
  184.  3.8  2.85 lineto
  185. -3.8  2.85 lineto
  186. closepath
  187. stroke
  188. } def
  189.  
  190. box
  191. gsave
  192. /Times-Roman findfont .30 scalefont setfont
  193. -1.00 3.50 moveto (Resolution Chart) show
  194. grestore
  195. -3.35 2.35 moveto (Font size in inches) show
  196. -2.43 2.17 moveto (\(vertical size =) show
  197. -2.43 1.97 moveto (~70\% of font size\)) show
  198. 0.1 2.36 moveto gsave (Lines \(black + white\)/vertical dimension) show
  199. grestore
  200. 0.8 -.18 rmoveto gsave ([Lines/horizontal dimension]) show
  201. grestore
  202. 1.30 -.18 rmoveto ({Lines/inch}) show
  203. gsave
  204. /Times-Roman findfont .12 scalefont setfont
  205. -0.8 -3.80 moveto (Spaces are 50 times wider than lines) show
  206. grestore
  207.  
  208. gsave
  209. .9 .9 scale
  210. box
  211. /Times-Roman findfont .18 scalefont setfont
  212. -1.5 -2.7  moveto (For camera, outer edge should just show.  ) show
  213.   (It measures 7.6 by 5.7 inches.) show
  214. grestore
  215.  
  216.  
  217. % bars: top
  218. gsave
  219. -3.425 2.85 translate
  220. /a 6.850 def % length of bar
  221. /aa 7.60 def % width of full test area
  222. /b 0 def  % distance along bar; init to 0
  223. /lw1 aa 300 div def % beginning line width
  224. /lw2 .0001 def % ending line width
  225. /c lw1 lw2 sub a div def
  226. % lw = (a-b)/a * (lw1-lw2) + lw2 = (a-b)*c + lw2
  227. /lwold lw1 def
  228. {/lw a b sub c mul lw2 add def
  229. lw setlinewidth
  230. b 0 moveto b -.277 lineto stroke
  231. lw lw2 le {exit} if
  232. /b b 2 lw mul add lw lwold sub 2 div add def
  233. % b = b+2*lw-(lwold-lw)/2 ; correction is to make the space same size as
  234. % previous line;  next line is smaller than previous so correction is needed.
  235. /lwold lw def
  236.    } loop
  237.  
  238. %labels:  lines/aa is lpaa=aa*lpi; lpi=1/lw; lw=1/lpi=aa/lpaa
  239. %       b = a-a*(lw-lw2)/(lw1-lw2) = a-(lw-lw2)/c
  240. .02 setlinewidth
  241. /bb 20 string def
  242. /Times-Roman findfont .15 scalefont setfont
  243. % input is lpaa to lab
  244. /lab {dup dup aa exch div lw2 sub c div neg a add 0 moveto
  245. gsave
  246. 0 -.277 rmoveto 0 -.05 rlineto stroke
  247. grestore
  248. 0 .08 rlineto
  249. -.13 .02 rmoveto
  250. gsave
  251. ({) show aa div round cvi bb cvs show (}) show
  252. grestore
  253. 0 .17 rmoveto
  254. ([) show bb cvs show (]) show stroke} def
  255. 300 lab
  256. 400 lab
  257. 500 lab
  258. 700 lab
  259. 900 lab
  260. 1200 lab
  261. 1600 lab
  262. 2400 lab
  263. 4000 lab
  264. /tic {dup dup aa exch div lw2 sub c div neg a add 0 moveto
  265. 0 .04 rlineto stroke} def
  266. 600 100 2400 {tic} for
  267. 3000 1000 7000 {tic} for
  268.  
  269.  
  270. % bars, bottom:
  271. grestore
  272. gsave
  273. -3.425 -2.85 translate
  274. /b 0 def  % distance along bar; init to 0
  275. /lwold lw1 def
  276. {/lw a b sub c mul lw2 add def
  277. lw setlinewidth
  278. b 0 moveto b  .277 lineto stroke
  279. lw lw2 le {exit} if
  280. /b b 2 lw mul add lw lwold sub 2 div add def % b = b+2*lw-(lwold-lw)/2
  281. /lwold lw def
  282.    } loop
  283.  
  284. %labels
  285. .02 setlinewidth
  286. /Times-Roman findfont .15 scalefont setfont
  287. % input is lpi to lab
  288. /lab {dup aa mul dup aa exch div lw2 sub c div neg a add 0 moveto
  289. gsave
  290. 0 .277 rmoveto 0 +.05 rlineto stroke
  291. grestore
  292. 0 -.08 rlineto
  293. -.13 -.12 rmoveto
  294. gsave
  295. ({) show exch bb cvs show (}) show
  296. grestore
  297. 0 -.17 rmoveto
  298. ([) show round cvi bb cvs show (]) show stroke} def
  299. 40 lab
  300. 50 lab
  301. 60 lab
  302. 80 lab
  303. 100 lab
  304. 120 lab
  305. 150 lab
  306. 200 lab
  307. 300 lab
  308. 600 lab
  309. /tic {dup aa mul dup aa exch div lw2 sub c div neg a add 0 moveto
  310. 0 -.04 rlineto stroke} def
  311. 40 10 100 {tic} for
  312. 200 100 1000 {tic} for
  313.  
  314.  
  315. % bars, below bottom, spaces = 50x line width
  316. % an uncrowded test for narrow lines
  317. 0 -.80 translate
  318. /b 0 def  % distance along bar; init to 0
  319. {/lw a b sub c mul lw2 add def
  320. lw setlinewidth
  321. b 0 moveto b  .277 lineto stroke
  322. lw lw2 le {exit} if
  323. /b b 50 lw mul add def %  b = b+50*lw
  324.    } loop
  325.  
  326. %labels
  327. .02 setlinewidth
  328. /Times-Roman findfont .15 scalefont setfont
  329. % input is lpi to lab
  330. /lab {dup aa mul dup aa exch div lw2 sub c div neg a add 0 moveto
  331. 0 .277 rmoveto
  332. 0 .08 rlineto stroke } def
  333. 40 lab
  334. 50 lab
  335. 60 lab
  336. 80 lab
  337. 100 lab
  338. 120 lab
  339. 150 lab
  340. 200 lab
  341. 300 lab
  342. 600 lab
  343. /tic {dup aa mul dup aa exch div lw2 sub c div neg a add 0 moveto
  344. 0 .277 rmoveto
  345. 0 .04 rlineto stroke} def
  346. 40 10 100 {tic} for
  347. 200 100 1000 {tic} for
  348.  
  349. % wedge:
  350. newpath
  351. 0 -.02 moveto
  352. 6.85 -.02 lineto
  353. 0 -.045 lineto
  354. closepath
  355. fill
  356.  
  357.  
  358. % bars: left
  359. grestore
  360. gsave
  361. -3.800 2.85 translate
  362. /a 5.700 def % length of bar
  363. /aa 5.70 def % width of full test area
  364. /b 0 def  % distance along bar; init to 0
  365. /lw1 aa 200 div def % beginning line width
  366. /c lw1 lw2 sub a div def
  367. % lw = (a-b)/a * (lw1-lw2) + lw2 = (a-b)*c + lw2
  368. /lwold lw1 def
  369. {/lw a b sub c mul lw2 add def
  370. lw setlinewidth
  371. 0 b neg moveto .370 0 rlineto stroke
  372. lw lw2 le {exit} if
  373. /b b 2 lw mul add lw lwold sub 2 div add def % b = b+2*lw-(lwold-lw)/2
  374. /lwold lw def
  375.    } loop
  376.  
  377. %labels:  lines/aa is lpaa=aa*lpi; lpi=1/lw; lw=1/lpi=aa/lpaa
  378. %       b = a-a*(lw-lw2)/(lw1-lw2) = a-(lw-lw2)/c
  379. .02 setlinewidth
  380. /bb 20 string def
  381. /Times-Roman findfont .15 scalefont setfont
  382. % input is lpaa to lab
  383. /lab {dup dup aa exch div lw2 sub c div neg a add neg 0 exch moveto
  384. gsave
  385. .370 0 rmoveto .05 0 rlineto stroke
  386. grestore
  387. -.08 0 rlineto
  388. -.75 -.035 rmoveto
  389. bb cvs show
  390. ( {) show aa div round cvi bb cvs show (}) show stroke} def
  391. 200 lab
  392. 250 lab
  393. 300 lab
  394. 400 lab
  395. 500 lab
  396. 700 lab
  397. 900 lab
  398. 1200 lab
  399. 2000 lab
  400. 2800 lab
  401. 4800 lab
  402.  
  403.  
  404. % bars: right
  405. grestore
  406. 3.800 2.85 translate
  407. /b 0 def  % distance along bar; init to 0
  408. /lwold lw1 def
  409. {/lw a b sub c mul lw2 add def
  410. lw setlinewidth
  411. 0 b neg moveto -.370 0 rlineto stroke
  412. lw lw2 le {exit} if
  413. /b b 2 lw mul add lw lwold sub 2 div add def % b = b+2*lw-(lwold-lw)/2
  414. /lwold lw def
  415.    } loop
  416.  
  417. %labels:  lines/aa is lpaa=aa*lpi; lpi=1/lw; lw=1/lpi=aa/lpaa
  418. %       b = a-a*(lw-lw2)/(lw1-lw2) = a-(lw-lw2)/c
  419. .02 setlinewidth
  420. /bb 20 string def
  421. /Times-Roman findfont .15 scalefont setfont
  422. % input is lpi to lab
  423. /lab {dup aa mul dup aa exch div lw2 sub c div neg a add neg 0 exch moveto
  424. gsave
  425. -.370 0 rmoveto -.05 0 rlineto stroke
  426. grestore
  427. .08 0 rlineto
  428. .02 -.035 rmoveto
  429. round cvi bb cvs show
  430. ( {) show bb cvs show (}) show stroke} def
  431. 35 lab
  432. 40 lab
  433. 50 lab
  434. 60 lab
  435. 80 lab
  436. 100 lab
  437. 120 lab
  438. 150 lab
  439. 200 lab
  440. 300 lab
  441. 600 lab
  442. /tic {dup aa mul dup aa exch div lw2 sub c div neg a add neg 0 exch moveto
  443. .04 0 rlineto stroke} def
  444. 40 10 100 {tic} for
  445. 200 100 1000 {tic} for
  446.  
  447. % wedge:
  448. newpath
  449. .9 0 moveto
  450. .9 -5.7 lineto
  451. .9285 0 lineto
  452. closepath
  453. fill
  454.  
  455. showpage
  456. % end
  457.  
  458.  
  459.